package com.EAsystem.mapper;

import com.EAsystem.entity.Grade;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 成绩数据访问接口
 */
@Mapper
public interface GradeMapper {


    /**
     * 查询所有成绩记录（用于分页）
     * @return 成绩记录列表
     */
    List<Grade> findAllForPage();

    /**
     * 根据条件查询成绩记录
     * @param grade 查询条件
     * @return 成绩记录列表
     */
    List<Grade> findByCondition(Grade grade);

    /**
     * 根据教师ID查询该教师课程的成绩记录
     * @param teacherId 教师ID
     * @param courseId 课程ID（可选）
     * @param studentSearch 学生姓名搜索（可选）
     * @return 成绩记录列表
     */
    List<Grade> findGradesByTeacher(@Param("teacherId") Integer teacherId, 
                                   @Param("courseId") Long courseId, 
                                   @Param("studentSearch") String studentSearch);

    /**
     * 根据ID查询成绩记录
     * @param id 成绩记录ID
     * @return 成绩记录
     */
    Grade findById(Long id);

    /**
     * 添加成绩记录
     * @param grade 成绩记录
     * @return 添加结果（影响行数）
     */
    int add(Grade grade);

    /**
     * 更新成绩记录
     * @param grade 成绩记录
     * @return 更新结果（影响行数）
     */
    int update(Grade grade);

    /**
     * 更新平时分
     * @param id 成绩记录ID
     * @param regularScore 平时分
     * @return 更新结果（影响行数）
     */
    int updateRegularScore(Integer id, Double regularScore);

    /**
     * 更新考试分
     * @param id 成绩记录ID
     * @param examScore 考试分
     * @return 更新结果（影响行数）
     */
    int updateExamScore(Integer id, Double examScore);

    /**
     * 删除成绩记录
     * @param id 成绩记录ID
     * @return 删除结果（影响行数）
     */
    int delete(Integer id);



}